package or.exa.cangguan.controller; // 定义包名，表示该类属于or.exa.cangguan.controller包


import io.swagger.annotations.Api; // 引入Swagger的@Api注解，用于API文档的生成
import io.swagger.annotations.ApiOperation; // 引入Swagger的@ApiOperation注解，用于描述具体API操作
import lombok.extern.slf4j.Slf4j; // 引入Lombok的@Slf4j注解，用于简化日志记录
import or.exa.cangguan.common.Page; // 引入Page类，用于分页处理
import or.exa.cangguan.common.Result; // 引入Result类，用于封装返回结果
import or.exa.cangguan.entity.vo.StoreVo;
import or.exa.cangguan.service.StoreService;
import or.exa.cangguan.service.impl.StoreServiceImpl; // 引入StoreServiceImpl类，用于仓库业务逻辑实现
import org.springframework.beans.factory.annotation.Autowired; // 引入Spring的@Autowired注解，用于依赖注入
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; // 引入Spring的@PostMapping注解，用于映射HTTP POST请求
import org.springframework.web.bind.annotation.RequestBody; // 引入Spring的@RequestBody注解，用于接收请求体
import org.springframework.web.bind.annotation.RestController; // 引入Spring的@RestController注解，用于定义RESTful控制器


@RestController // 标记该类为RESTful控制器，返回的数据直接作为HTTP响应体
@Slf4j // 使用Lombok的@Slf4j注解，自动生成日志对象
@Api(tags = "仓库管理") // 使用Swagger的@Api注解，定义API文档的标签
public class StoreController {

    @Autowired // 使用Spring的@Autowired注解，自动注入StoreServiceImpl实例
    private StoreService storeService;


    //    新增仓库
    @PostMapping("/store/addStore") // 使用Spring的@PostMapping注解，映射到/addStore路径的POST请求
    @ApiOperation(value = "新增仓库") // 使用Swagger的@ApiOperation注解，描述该API操作
    private Result addWareHouse(@RequestBody StoreVo StoreVo) { // 定义新增仓库的方法，接收RequestStoreVo类型的请求体
        log.info(StoreVo.toString()); // 记录请求参数的日志信息

        int insert = storeService.insert(StoreVo); // 调用StoreServiceImpl的insert方法，插入仓库数据


        return insert > 0 ? Result.ok("新增成功") : Result.ok("新增失败");
    }


    //    查询仓库
    @PostMapping("/store/store-list") // 使用Spring的@PostMapping注解，映射到/store-list路径的POST请求
    @ApiOperation(value = "查询仓库") // 使用Swagger的@ApiOperation注解，描述该API操作
    private Result searchWareHouse(@RequestBody StoreVo StoreVo) { // 定义查询仓库的方法，接收RequestStoreVo类型的请求体
        log.info("查询仓库"); // 记录日志信息

        log.info(StoreVo.toString()); // 记录请求参数的日志信息
        Page page = storeService.selectStore(StoreVo); // 调用StoreServiceImpl的selectStore方法，查询仓库数据

        return Result.ok(page); // 返回查询结果，封装在Result对象中

    }


    //    删除仓库
    @PostMapping("/store/deleteStore/{storeId}") // 使用Spring的@PostMapping注解，映射到/deleteStore/{storeId}路径的POST请求
    @ApiOperation(value = "删除仓库") // 使用Swagger的@ApiOperation注解，描述该API操作
    private Result deleteWareHouse(@PathVariable int storeId) { // 定义删除仓库的方法，接收RequestStoreVo类型的请求体
        int i = storeService.deleteByPrimaryKey(storeId); // 调用StoreServiceImpl的deleteByPrimaryKey方法，根据仓库ID删除仓库数据
        return i > 0 ? Result.ok("删除成功") : Result.ok("删除失败"); // 根据删除结果返回相应的提示信息
    }


    //    更新仓库
    @PostMapping("/store/updateStore")
    @ApiOperation(value = "更新仓库")
    private Result updateWareHouse(@RequestBody StoreVo StoreVo) { // 定义更新仓库的方法，接收RequestStoreVo类型的请求体


        return storeService.updateByPrimaryKey(StoreVo) > 0 ? Result.ok("更新成功") : Result.ok("更新失败");

    }


    //查询所有仓库名
    @PostMapping("/store/storeName")
    @ApiOperation(value = "查询所有仓库名")
    private Result searchStoreName() { // 定义查询仓库名称的方法
        log.info("查询所有仓库名"); // 记录日志信息

        return Result.ok(storeService.selectStoreName()); // 返回查询结果，封装在Result对象中
    }


}